package com.itaem.community.modules.infrastructure.user.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.itaem.community.core.entity.PageData;
import com.itaem.community.modules.infrastructure.user.dto.*;
import com.itaem.community.modules.infrastructure.user.entity.UserEntity;

/**
 * <p>
 * 用户信息 服务类
 * </p>
 *
 * @author tomato
 * @since 2020-10-28
 */
public interface UserService extends IService<UserEntity> {

    /**
     * 分页查询用户
     *
     * @param page 页码
     * @param size 数量
     * @return 分页数据
     */
    PageData<UserDTO> pageUsers(Long page, Long size);

    /**
     * 通过电话号码新增信息，user_phone表与user表
     *
     * @param dto 带有电话号码的用户信息
     * @return 保存结果
     */
    Boolean saveUserByPhoneNumber(UserPhoneCreateDTO dto);

    /**
     * 通过微信唯一id新增信息，user_wechat表与user表
     *
     * @param dto 带有微信openid的用户信息
     * @return 保存结果
     */
    Boolean saveUserByWechatNumber(UserWechatCreateDTO dto);

    /**
     * 根据用户id获取单个用户信息（个人资料修改等）
     *
     * @param userId 用户id
     * @return 用户信息
     */
    UserDTO getUserById(Integer userId);

    /**
     * 根据id更新用户信息
     *
     * @param updateDto 含有用户id的信息
     * @return 更新结果
     */
    Boolean updateUser(UserUpdateDTO updateDto);

    /**
     * 进行身份证实名认证
     *
     * @param authenticationDto 认证信息（包含用户id，用户真实姓名，用户身份证号码）
     * @return 认证结果
     */
    Boolean idCardAuthenticate(UserIdCardAuthenticationDTO authenticationDto);

    /**
     * 更新密码
     *
     * @param userPhoneUpdateDto 包含id和新密码的数据实体
     * @return 更新结果
     */
    Boolean updatePhoneLoginPassword(UserPhoneUpdateDTO userPhoneUpdateDto);

    /**
     * 删除用户
     * @param id 用户id
     * @return 删除结果
     */
    Boolean removeUserById(Integer id);

}
